﻿/****************************************************************************
*	Copyright (c) 2013, changyuan.game
*	All rights reserved.
*****************************************************************************
*	filename:	GlobalFunc.cpp
*  author:		ye.tao
*	e-mail:		yetao@11game.com
*	created:	2014/06/13
*	descript:   辅助函数库
****************************************************************************/
#include "GlobalFunc.h"
#include "iconv.h"

int gCodeConvert( char* from_charset, char* to_charset, char* inbuf, size_t inlen, char* outbuf, size_t outlen )
{
#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32

	iconv_t cd = iconv_open(to_charset, from_charset);
	if (cd == 0)
		return -1;
	memset(outbuf, 0, outlen);
	const char* temp = inbuf;
	const char** pin = &temp;
	char** pout = &outbuf;
	if (!iconv(cd, pin, &inlen, pout, &outlen))
	{
		iconv_close(cd);
		return -1;
	}
	iconv_close(cd);
	return outlen;

#endif

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID

	iconv_t cd = iconv_open(to_charset, from_charset);
	if (cd == 0)
		return -1;
	memset(outbuf, 0, outlen);
	if (!iconv(cd, &inbuf, &inlen, &outbuf, &outlen))  
	{  
		iconv_close(cd);  
		return -1;  
	}
	iconv_close(cd);
	return outlen;

#endif

#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS

	return inlen;

#endif
}

int gTimeToFrames( double time )
{
	return (int)(time / Director::sharedDirector()->getAnimationInterval());
}

double gFramesToTime( int frames )
{
	return frames * Director::sharedDirector()->getAnimationInterval();
}

void xorCoding(char * str, int len)
{
	char key[] = "11game";
	for (unsigned int i = 0; i < len; i++)
	{
		str[i] = (char) (str[i] ^ key[i % strlen(key)]);
	}
}

//long gGetMilliSecondNow()
//{
//	struct cc_timeval now;
//	CCTime::gettimeofdayCocos2d(&now, NULL);
//	return (now.tv_sec * 1000 + now.tv_usec / 1000); 
//}

//int gGetRandNumber( int nRange )
//{
//	if(nRange != 0)
//	{
//		int random = (int)(CCRANDOM_0_1()*10*123456); 
//		return random%nRange;
//	}
//	return 0;
//}

//int gGetRandNumber( int nBegin,int nEnd )
//{
//	int nRange = nEnd - nBegin;
//	return (nBegin+gGetRandNumber(nRange));
//}
//
//std::string gNumToStr( int nNum )
//{
//	std::string strDes;
//	strDes.clear();
//	char data[30] = {'\0'};
//	sprintf(data, "%d", nNum);
//	strDes = data;
//	return strDes;
//}
//
////std::string gTimeTostr( float fTime )
////{
////	std::string strDes = "";
////	fTime /= 1000;
////	strDes.clear();
////	float nNewTime = fTime + 0.99f;
////	int nNum = (long long)fTime%3600;
////
////	if((long long)fTime/3600/24 != 0) // 从天记起（不显示分钟和秒数）
////	{
////		strDes += gNumToStr((long long)fTime/3600/24) +"d";  // 天
////		if((long long)fTime/3600%24 != 0)
////		{
////			strDes += gNumToStr((long long)fTime/3600%24) +"h";  // 小时
////		}	
////	}
////	else if((long long)fTime/3600 != 0) // 从小时记起（不显示秒）
////	{
////		strDes += gNumToStr((long long)fTime/3600) +"h";  // 小时
////		if(nNum/60 != 0)
////		{
////			strDes += gNumToStr(nNum/60) +"m";  // 分钟
////		}	
////	}
////	else if(nNum/60 != 0) // 从分钟记起
////	{
////		strDes += gNumToStr(nNum/60) +"m";  // 分钟
////		if(nNum%60 != 0)
////		{
////			strDes += gNumToStr(nNum%60) +"s";  // 秒
////		}
////	}
////	else if(nNum%60 != 0) // 从秒记起
////	{
////		strDes += gNumToStr(nNum%60) +"s";  // 秒
////	}
////	strDes = ((long long)fTime/3600 < 10?"0":"")+gNumToStr((long long)fTime/3600) +":"+(nNum/60<10?"0":"")+gNumToStr(nNum/60)+":"+(nNum%60<10?"0":"")+gNumToStr(nNum%60)+"";
////	return strDes;
////}
//std::string gTimeToStr( float fTime )
//{
//	std::string strDes = "";
//	fTime /= 1000;
//	strDes.clear();
//	float nNewTime = fTime + 0.99f;
//	int nNum = (long long)fTime%3600;
//
//	if((long long)fTime/3600/24 != 0) // 从天记起（不显示分钟和秒数）
//	{
//		strDes += gNumToStr((long long)fTime/3600/24) +"D ";  // 天
//		if((long long)fTime/3600%24 != 0)
//		{
//			strDes += gNumToStr((long long)fTime/3600%24) +"H";  // 小时
//		}	
//	}
//	else if((long long)fTime/3600 != 0) // 从小时记起（不显示秒）
//	{
//		strDes += gNumToStr((long long)fTime/3600) +"H ";  // 小时
//		if(nNum/60 != 0)
//		{
//			strDes += gNumToStr(nNum/60) +"M";  // 分钟
//		}	
//	}
//	else if(nNum/60 != 0) // 从分钟记起
//	{
//		strDes += gNumToStr(nNum/60) +"M ";  // 分钟
//		if(nNum%60 != 0)
//		{
//			strDes += gNumToStr(nNum%60) +"S";  // 秒
//		}
//	}
//	else if(nNum%60 != 0) // 从秒记起
//	{
//		strDes += gNumToStr(nNum%60) +"S";  // 秒
//	}
//	else if (fTime  == 0)
//	{
//		strDes = "0S";
//	}
//	else if (fTime  != 0)
//	{
//		strDes = "1S";
//	}
//	
//	//strDes = ((long long)fTime/3600 < 10?"0":"")+gNumToStr((long long)fTime/3600) +"h"+(nNum/60<10?"0":"")+gNumToStr(nNum/60)+"m"+(nNum%60<10?"0":"")+gNumToStr(nNum%60)+"s";
//	return strDes;
//}
//
//std::string gTimeXXXXToStr( float fTime )
//{
//	std::string strMinute = "";
//	// 分 格式："00"
//	if(gNumToStr(((int)fTime)/60).size() == 1)
//	{
//		strMinute = "0" + gNumToStr(((int)fTime)/60);
//	}
//	else
//	{
//		strMinute = gNumToStr(((int)fTime)/60);
//	}
//
//	std::string strSecond = "";
//	// 秒 格式："00"
//	if(gNumToStr(((int)fTime)%60).size() == 1)
//	{
//		strSecond = "0" + gNumToStr(((int)fTime)%60);
//	}
//	else
//	{
//		strSecond = gNumToStr(((int)fTime)%60);
//	}
//	return strMinute+":"+strSecond;
//}
//
//std::string gGetMinuteStr( float fTime )
//{
//	std::string str = "";
//	// 分 格式："00"
//	if(gNumToStr(((int)fTime)/60).size() == 1)
//	{
//		str = "0" + gNumToStr(((int)fTime)/60);
//	}
//	else
//	{
//		str = gNumToStr(((int)fTime)/60);
//	}
//	return str;
//}
//
//std::string gGetSecondStr( float fTime )
//{
//	std::string str = "";
//	// 秒 格式："00"
//	if(gNumToStr(((int)fTime)%60).size() == 1)
//	{
//		str = "0" + gNumToStr(((int)fTime)%60);
//	}
//	else
//	{
//		str = gNumToStr(((int)fTime)%60);
//	}
//	return str;
//}
//
//CSJson::Value gLoadJsonFile( const char* pFileName )
//{
//	do 
//	{	
//		const char * pBuffer = NULL;
//		CC_BREAK_IF(pFileName == NULL);
//
//		std::string tFullName("");
//		tFullName = tFullName + GAME_TABLES + pFileName;
//
//		std::string tFullPath = cocos2d::CCFileUtils::sharedFileUtils()->fullPathForFilename(tFullName.c_str());
//
//		unsigned long lFileLen = 0L;
//		pBuffer = (char*)(cocos2d::CCFileUtils::sharedFileUtils()->getFileData(tFullPath.c_str(),"r" , &lFileLen));
//
//
//		CSJson::Reader reader;
//		CSJson::Value jsValue;
//		reader.parse(pBuffer,jsValue,false);
//		CC_SAFE_DELETE(pBuffer);
//		return jsValue;
//	} while (0);
//	return CSJson::Value::jsonNull;
//}
//
//void gShowRectLogInfo( CCRect rect )
//{
//	CCLog("rect x = %f, y = %f, w = %f, h = %f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
//}
//
//long getCurrentTime()
//{
//		struct timeval tv;
//		gettimeofday(&tv,NULL);
//		return tv.tv_sec * 1000 + tv.tv_usec / 1000;
//}
//
//int gGetRunestoneByTime( long long lTime )
//{
//	if (lTime <= 0)
//	{
//		return 1;
//	}
//	
//	float fNum = 0;
//	float fTime = (float)lTime/(float)(1000*60*60);
//	if ( fTime <= 1.0)
//	{
//		fNum = fTime*30.0;
//	}
//	else if (fTime <= 24.0)
//	{
//		fNum = 30.0 + (float)(fTime - 1.0)*10.0;
//	}
//	else
//	{
//		fNum = 260.0 + (float)(fTime - 24.0)*5.0;
//	}
//	if ((int)fNum <= 0)
//	{
//		return 1;
//	}
//	if (fNum > (int)fNum)
//	{
//		return (int)fNum + 1;
//	}
//	else
//	{
//		return (int)fNum;
//	}
//	
//}
//
//int gGetRunestoneByTime_ArmyCDTime( long long lTime )
//{
//	if (lTime <= 0)
//	{
//		return 1;
//	}
//
//	float fNum = 0;
//	float fTime = (float)lTime/(float)(1000*60);
//	if ( fTime <= 5.0)
//	{
//		fNum = fTime*3.0;
//	}
//	else
//	{
//		fNum = (fTime - 5)*2 +15;
//	}
//	return fNum;
//}
//
//float gAngleAnalyse(float startX, float startY, float endX, float endY)
//{
//	float PI = 3.1415926f;
//	float dis = sqrtf((startX - endX)*(startX - endX) + (startY - endY)*(startY - endY));
//	float disX = fabs(endX - startX);
//	float disY = fabs(endY - startY);
//
//	if (startY < endY)  // 1,2象限
//	{
//		if(startX <= endX) //1象限
//		{	
//			float cosValue = disX / dis; 
//			return 360 - acos(cosValue)*180/PI;
//		}
//		else  //2象限
//		{
//			float cosValue = - disX / dis; 
//			return 360 - acos(cosValue)*180/PI;
//		}
//	}
//	else  // 3,4象限
//	{
//		if(startX <= endX) //4象限
//		{	
//			float cosValue = disX / dis; 
//			return 360 - (270 + asin(cosValue)*180/PI);
//		}
//		else  //3象限
//		{
//			float cosValue = - disX / dis; 
//			return 360- ( 270 + asin(cosValue)*180/PI);
//		}
//	}
//	return -1;   //没有结果
//}
//
//std::string gTimeToStrEx( float fTime )
//{
//	//单位秒
//	std::string strDes = "";
//	int hour = (long long)fTime/3600;
//	int min = (long long)fTime/60%60;
//	int second = (long long)fTime%60;
//	if (hour < 10)
//	{
//		strDes += "0" + gNumToStr(hour);
//	}
//	else
//	{
//		strDes += gNumToStr(hour);
//	}
//	strDes += ":";
//	if (min < 10)
//	{
//		strDes += "0" + gNumToStr(min);
//	}
//	else
//	{
//		strDes += gNumToStr(min);
//	}
//	strDes += ":";
//	if (second < 10)
//	{
//		strDes += "0" + gNumToStr(second);
//	}
//	else
//	{
//		strDes += gNumToStr(second);
//	}
//	return strDes;
//}
//
//CCPointArray * gRefreshPointArray( float x,float y, int nNum, int nR )
//{
//	CCPointArray *pArray = CCPointArray::create(nNum + 2);
//	float PI = 3.1415926;
//
//	double angle = PI*2/nNum;
//	pArray->addControlPoint(ccp(0, 0));
//	for(int i = 1; i < nNum; i++)
//	{	
//		double pX = cos(angle*i)*nR + x - nR;
//		double pY = sin(angle*i)*nR + y;
//		pArray->addControlPoint(ccp(pX, pY));
//	}
//	pArray->addControlPoint(ccp(0, 0));
//	return pArray;
//}
